package modele;

import java.util.Observable;
/**
 * contient la bdteque, gere les menu et zone affiché
 *
 *
 * @author tomu
 *
 */
public class ModeleP extends Observable {
	CollectionBD collec,souscollec;
	Album album=null;
	ModeleMA modelema;
	TableModel tablemod;
	boolean am;
	/**
	 * Renvoit une instance de modele
	 * @param collec La collection concernee.
	 */
	public ModeleP (CollectionBD collec){
		this.collec=collec;
		this.souscollec=collec;
		this.tablemod=new TableModel(this);
		album=null;
	}
	/**
	 * Change la souscollection affiche et averti les vues du changement
	 * @param souscollec La sous collection concernee.
	 */
	protected void setSousBD(CollectionBD souscollec){
		this.souscollec=souscollec;
		noty();
		}
	/**
	 * Signale au modele qu'un de ces elements a� ete modifie.
	 */
	private void noty(){
		this.tablemod.changedData();
		tablemod.fireTableStructureChanged();
		setChanged();
		notifyObservers();
	}
	/**
	 * Signale que l'on commence une modification
	 */
	public void mDebut(){
		modelema=new ModeleMA(collec, album, this);
		am=true;
		noty();
	}
	/**
	 * signale que l'on commence l'ajout
	 */
	public void aDebut(){
		modelema=new ModeleMA(collec, null, this);
		am=true;
		noty();
	}
	/**
	 * signale que la modification ou l'ajout est termine
	 */
	public void amFinit(){
		am=false;
		noty();
	}
	/**
	 * Permet de recuperer l'instance d'ajout ou de modification en cours
	 * @return l'instance de modeleMA en cours
	 */
	public ModeleMA getModeleMA(){
		return this.modelema;
	}
	/**
	 * Permet de savoir si une modification ou un ajout est en cours d'execution.
	 * @return am Retourne vrai si l'am est en cours
	 */
	public boolean amEnCours(){
		return am;
	}
	/**
	 * Supprime l'album selectionne et la collection et averti la vue que la collection a change
	 */
	public void supprimer(){
		collec.supprimer(album);
		noty();
	}
	/**
	 * Permet de recuperer l'album dernierement selectionne
	 * @return l'album selectionnee (null si aucun selectionne)
	 */
	public Album getAlbum(){
		return album;
	}
	/**
	 * Permet de definir a partir de l'interaction JTable, l'album selectionne par l'utilisateur.
	 * @param ligne La ligne du tableau qui a ete selectionne.
	 * 
	 */
	public void setAlbum(int ligne){
		this.album=souscollec.getAlbumIn(ligne);
		noty();
	}
	/**
	 * Permet de recuperer la sous collection utilisee
	 * @return la sous collection
	 */
	public CollectionBD getSousCollec(){
		return this.souscollec;
	}
	/**
	 * Permet de recuperer la collection en cours d'utilisation.
	 * @return une CollectionBD
	 */
	public CollectionBD getCollec(){
		return this.collec;
	}
	/**
	 * Permet de recuperer le modele pour la JTable
	 * @return JTableModel des donnes
	 */
	public TableModel getTableMod(){return tablemod;}
	public void setBD(CollectionBD collec){
		this.collec=collec;
		album=null;
		souscollec=collec;
		noty();
	}
}

